import Vue from "vue";
import { foreach } from "./utils/index";
// export let Vue;
/**
 * 要是格式化下面的格式
 */

// root = {
//   _raw: '用户传过来的数据',
//   _children: {
//     a: {
//       _raw: '用户传过来的数据',
//       state: '根数据',
//       _children: {
//         f: {}// 在递归

//       }
//     },
//     b: {
//       _raw: '用户传过来的数据',
//       state: '根数据',
//       _children: {
//         f: {}// 在递归
//       }
//     }
//   },
//   state: '根数据'
// }

class ModuleCollctions {
  constructor(options) {
    // console.log("options")
  }
}
export class Store {
  constructor(options) {
    // 模块化处理 需要格式化数据
    // 根式获取数据,变成一个树型结构
    this._modules = new ModuleCollctions(options);
  }
}

// 不是模块化时的处理
(function () {
  return;
  // export 不注释报红
  //export class Store {
  //   constructor(options) {

  //     // console.log(options);
  //     // 这样没有响应式
  //     // this.state = options.state;

  //     // 计算属性
  //     // getters 计算属性 用户:{属性:方法} 使用却是{对象:值}
  //     let getters = options.getters;
  //     this.getters = {};
  //     let computed = {

  //     }
  //     foreach(getters, (key, value) => {
  //       computed[key] = () => {
  //         return value(this.state);
  //       }
  //       Object.defineProperty(this.getters, key, {
  //         get: () => {
  //           return this._vm[key]
  //         },
  //       });
  //     });

  //     let mutations = options.mutations
  //     this.mutations = {}
  //     foreach(mutations, (key, value) => {
  //       this.mutations[key] = (data) => {
  //         value(this.state, data)
  //       }
  //     })

  //     let actions = options.actions
  //     this.actions = {}
  //     foreach(actions, (key, value) => {
  //       this.actions[key] = (data) => {
  //         value(this, data)
  //       }
  //     })
  //     // Object.keys(getters).forEach((key) => {
  //     //   Object.defineProperty(this.getters, key, {
  //     //     get: () => {
  //     //       return getters[key](this.state);
  //     //     },
  //     //   });
  //     // });
  //     this._vm = new Vue({
  //       data: {
  //         state: options.state,
  //       },
  //       computed
  //     });
  //   }
  //   // get
  //   get state() {
  //     return this._vm.$data.state;
  //   }
  //   commit = (key, data) => {// this指向

  //     this.mutations[key](data)

  //   }
  //   dispatch = (key, data) => {
  //     this.actions[key](data)

  //   }
  //   updateState(partialState) {
  //     // 如果 partialState 是一个对象，并且你想要合并它到现有的 state 中
  //     // 你可以使用 Object.assign 或其他合并策略，但请注意 Vue 不能检测到对象属性的添加或删除
  //     // 对于数组和对象内部的改变，你应该使用 Vue.set 或 this._vm.$set
  //     Object.assign(this._vm.state, partialState);

  //     // 或者，如果你知道你要更新的具体属性，可以直接设置
  //     // this._vm.state.someProperty = newValue;

  //     // 注意：如果你使用的是 Vuex 或类似的库，会有更复杂的逻辑来处理状态更新
  //   }
  // }
})();
